package org.wupuser.controller;

import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpSession;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.wupuser.model.Admin;
import org.wupuser.model.dto.LoginRespDTO;
import org.wupuser.service.AdminService;

@RequestMapping("/admin")
@RestController
public class AdminController {
	@Resource
	private AdminService adminService;
	
	/**
	 * 管理员登录接口
	 *
	 * @param admin 接收前端传来的管理员信息，通过@RequestBody注解将请求体绑定到Admin对象
	 *
	 * @return 返回ResponseEntity<?>类型响应，包含状态码和响应体
	 */
	@PostMapping("/admin/login")  // 处理HTTP POST请求，映射到"/admin/login"路径
	public ResponseEntity<?> adminLogin(
		@RequestBody  // 将请求体中的JSON数据绑定到Admin对象
		Admin admin,
		// 管理员对象，包含用户名和密码等信息
		HttpSession session) {  // HTTP会话对象，用于存储登录后的token
		// 检查admin对象是否为空
		if (admin != null) {
			// 调用adminService的login方法进行登录验证
			LoginRespDTO loginRespDTO = adminService
				.login(
					admin.getName(),
					// 传入用户名
					// 传入用户名
					admin.getPwd())
				.getBody();  // 传入密码
			session.setAttribute(
				"token",
				loginRespDTO.getToken());
		}
		// 如果admin为空，返回400状态码和错误信息
		return ResponseEntity
			.status(400)
			.body("用户名或密码错误");
	}
	
	/**
	 * 管理员退出接口
	 *
	 * @param admin 包含管理员信息的请求体，其中name字段用于标识要退出的管理员
	 *
	 * @return 返回ResponseEntity<?>类型，表示HTTP响应，具体内容由adminService.exit()方法决定
	 */
	@PostMapping("/admin/exit")
	public ResponseEntity<?> adminExit(@RequestBody Admin admin) {
		// 调用adminService的exit方法，传入管理员名称，处理退出逻辑
		return adminService.exit(admin.getName());
	}
	
}
